
// 实现一个方法，来判断一个正整数是否是2的整数次幂（如16是2的4次方，返回true；18不是2的整数次幂，则返回false）。要求性能尽可能高。




// 方式一，利用中间变量 时间复杂度 O(logn)
function isPowerOf2_V1(num) {
    let temp = 1;
    while(temp <= num) {
      if (temp === num) {
        return true
      }
      temp = temp * 2 // => 可替换移位操作 temp = temp<<1
    }
    return false
}


// 十进制   二进制   原数值-1    n&n-1   是否为2的整数次幂
//  8        1000B    111B        0           是
//  16       10000B   1111B       0           是 
//  100      1100100B  1100011B   1100000B    否

// 凡是2的整数次幂和它本身减1的结果进行与运算，结果都必定是0。反之，如果一个整数不是2的整数次幂，结果一定不是0！

function isPowerOf2_V2(num){
    return (num&num-1)==0;
}

